package cn.edu.tju.elm.model.entity;

import cn.edu.tju.core.model.BaseEntity;
import cn.edu.tju.core.model.User;
import jakarta.persistence.*;
import lombok.*;
import lombok.experimental.SuperBuilder;
import org.hibernate.annotations.DynamicUpdate;

import java.time.LocalDate;

@Entity
@Table(name = "user_profile",
        indexes = {
                @Index(name = "idx_username", columnList = "username") // 按账号快速查找用户资料
        })
@Data
@NoArgsConstructor
@AllArgsConstructor
@SuperBuilder
@DynamicUpdate // Hibernate 仅生成包含实际修改字段的 UPDATE语句（减少 SQL 数据量，提升性能）
public class UserProfile extends BaseEntity {

    /**
     * 用户账号（关联user表account，唯一）
     */
    @Column(name = "username", nullable = false, length = 50, unique = true,
            columnDefinition = "VARCHAR(50) NOT NULL COMMENT '用户账号（关联user表username）'")
    private String username;

    /**
     * 头像URL
     */
    @Column(name = "avatar_url", length = 255,
            columnDefinition = "VARCHAR(255) DEFAULT NULL COMMENT '头像URL（如：https://example.com/avatar.jpg）'")
    private String avatarUrl;

    /**
     * 用户生日
     */
    @Column(name = "birthday",
            columnDefinition = "DATE DEFAULT NULL COMMENT '用户生日（格式：YYYY-MM-DD）'")
    private LocalDate birthday;

    /**
     * 个人简介（长文本）
     */
    @Column(name = "bio", columnDefinition = "TEXT DEFAULT NULL COMMENT '个人简介（支持长文本）'")
    private String bio;


    /**
     * 与user表的一对一关联（通过主键id强关联）
     */
    @OneToOne(fetch = FetchType.LAZY)
    @MapsId // 共享主键（user_profile.id 与 user.id 相同）
    @JoinColumn(name = "id", foreignKey = @ForeignKey(name = "fk_user_profile_user_id"))
    private User user;
}